#pragma once

#include <cstdint>
#include <string>
#include <GL/glew.h>
#include <GLFW/glfw3.h>

namespace teflon
{
    struct WindowProps
    {
        uint32_t width;
        uint32_t height;
        std::string title;
    };

    class Window
    {
    private:
        uint32_t width = 0;
        uint32_t height = 0;
        std::string title;

        GLFWwindow* window = nullptr;

    public:
        Window(const std::string& title, uint32_t width, uint32_t height);
        Window(const WindowProps& props);
        ~Window();

        GLFWwindow* GetHandle() const { return window; }

        uint32_t GetWidth() const { return width; }
        uint32_t GetHeight() const { return height; }

        void Update();
        void ProcessEvents();
        bool Closed();
    };
}
